<?php
namespace App\Utils\Str;
class Str{
    /**
     * 将下划线命名转换为驼峰式命名(默认首字母为大写)
     * @param string $str
     * @param boolean $ucfirst
     * @return string
     */
    public static function toCamelCase($str, $ucfirst = true)
    {
        $strList = explode('_' , $str);
        foreach($strList as $key=>$val){
            $strList[$key] = ucfirst($val);
            if(!$ucfirst) $strList[0] = strtolower($strList[0]);
        }
        return implode('' , $strList);
    }

    /**
     * 驼峰命名转下划线命名
     * 思路:
     * 小写和大写紧挨一起的地方,加上分隔符,然后全部转小写
     */
    public static function toUnderLine($str,$separator='_')
    {
        return strtolower(preg_replace('/([a-z])([A-Z])/', "$1" . $separator . "$2", $str));
    }

    /**
     * 创建订单号
     */
    public static function createOrderNo($prefix = '')
    {
        $orderNo = $prefix . substr(date("YmdHis"), 2) . substr(microtime(), 2, 4) . rand(1000, 9999);

        return $orderNo;
    }

    /**
     * 判断字符串是否是 JSON
     */
    public static function isJson($string)
    {
        json_decode($string);
        return (json_last_error() == JSON_ERROR_NONE);
    }

    /**
     * key值格式化
     */
    public static function format($keyFormat, ...$keyValues)
    {
        if (count($keyValues) == 0) {
            return $keyFormat;
        }
        $re = preg_match_all('/\\{[A-Z|a-z|0-9|_]+\\}/', $keyFormat, $result);
        if ($re !== false) {
            return str_replace($result[0], $keyValues, $keyFormat);
        }
        return $keyFormat;
    }

}